#include <iostream>
#include <unordered_map>
#include <memory>
#include "Thread.hpp"

#define NUM 10

class threadData
{
public:
    int max;
    int start;
};

void Count(threadData td)
{
    for (int i = td.start; i < td.max; i++)
    {
        std::cout << "i == " << i << std::endl;
        sleep(1);
    }
}

int main()
{
    threadData td;
    td.max = 60;
    td.start = 50;
    ThreadModule::Thread<threadData> t(Count, td);

    t.Start();

    sleep(20);

    t.Stop();
    t.Join();

    return 0;
}







// using thread_ptr_t = std::shared_ptr<ThreadModule::Thread>;

// int main()
// {
//     // ThreadModule::Thread t([](){
//     //     while(true)
//     //     {
//     //         std::cout << "hello world" << std::endl;
//     //         sleep(1);
//     //     } });

//     // t.Start();
//     // std::cout << t.Name() << " is running" << std::endl;
//     // sleep(5);

//     // t.Stop();
//     // std::cout << "Stop thread : " << t.Name() << std::endl;
//     // sleep(1);
//     // bool ret = t.Join();
//     // std::cout << "Join thread : " << ret << std::endl;

//     std::unordered_map<std::string, thread_ptr_t> threads;

//     for (int i = 0; i < NUM; i++)
//     {
//         thread_ptr_t t = std::make_shared<ThreadModule::Thread>([](){
//             while(true)
//             {
//                 std::cout << "hello world" << std::endl;
//                 sleep(1);
//             } });
//         threads[t->Name()] = t;
//     }

//     for(auto &thread:threads)
//     {
//         thread.second->Start();
//     }

//     std::cout << "开始阻塞等待退出"<<std::endl;
//     for(auto &thread:threads)
//     {
//         thread.second->Stop();
//         thread.second->Join();
//     }
//     return 0;
// }